package uestc.lj.basic.recall;

/**
 * 汉诺塔问题
 *
 * @Author:Crazlee
 * @Date:2021/11/25
 */
public class Code02_Hanoi {
	/**
	 * 打印汉诺塔问题
	 *
	 * @param n 共n个圆盘
	 */
	public static void hanoi(int n) {
		if (n > 0) {
			func(n, "左", "右", "中");
		}
	}

	/**
	 * 将n个圆盘从start开始移动到end处
	 *
	 * @param n     要移动n个圆盘
	 * @param start 开始位置
	 * @param end   结束位置
	 * @param other 其他位置
	 */
	private static void func(int n, String start, String end, String other) {
		if (n == 1) {
			System.out.println("Move 1 from " + start + " to " + end);
		} else {
			//先将n-1个圆盘从start移动到other处
			func(n - 1, start, other, end);
			//将第n个圆盘从start移动到end处
			System.out.println("Move " + n + " from " + start + " to " + end);
			//最后将n-1个圆盘从other移动到end处
			func(n - 1, other, end, start);
		}
	}

	public static void main(String[] args) {
		int n = 3;
		hanoi(3);
	}
}
